Terraform でEC2 Instance Connect Endpointを作成してみました。

Terraform でEC2 Instance Connect Endpointを作成してみました。

Clock Icon2023.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、クラスメソッドのヌヌです。

EC2 Instance Connect Endpointを作成できるTerraformのアップデートがありましたので、やってみました。

TerraformのEIC Endpointについて

事前確認

EC2 Instance Connect EndpointはAWS Provider 5.6.0以上のバージョンから作成可能です。 そのため、Terraformで EIC Endpointを作成する前、Providerのバージョンを確認してください。

中身について

EIC Endpointのリソースタイプは aws_ec2_instance_connect_endpointです。次のようにコードを作成できます。

# main.tf

resource "aws_ec2_instance_connect_endpoint" "eic_test" {
    subnet_id = aws_subnet.test_private_subnet.id # 必須
    security_group_ids = [aws_security_group.ssh_eic.id] # オブション
    preserve_client_ip = true # オブション

    tags = { # オブション
        Name = "名前"
    }
}
  • subnet_id(必須):必須入力項目です。エンドポイントを作成するサブネットIDを定義します。
  • security_group_ids:エンドポイントに適用するセキュリティグループです。何も定義しない場合、VPCのデフォルトセキュリティグループが適用されます。
  • preserve_client_ip:クライアントIPアドレスを保存可否を定義します。デフォルトはtrue です。
  • tag:タグを作成します。

やってみました

コード作成

terraform {
    required_providers {
        aws = ">= 5.6.0"
    }
}

provider "aws" {
    region = "ap-northeast-1"
}

resource "aws_vpc" "test" { 
    cidr_block = "172.31.0.0/16"
}

resource "aws_subnet" "test_private_subnet" {
    vpc_id            = aws_vpc.test.id
    cidr_block        = "172.31.0.0/24"
    availability_zone = "ap-northeast-1a"
}

resource "aws_route_table" "private_rt" {
    vpc_id = aws_vpc.test.id
}

resource "aws_ec2_instance_connect_endpoint" "test_eic" {
    subnet_id = aws_subnet.test_private_subnet.id # 必須
    security_group_ids = [aws_security_group.ssh_eic.id] # オブション
    preserve_client_ip = true # オブション

    tags = { # オブション
        Name = "eic-test"
    }
}

# EIC Endpointのセキュリティグループ
resource "aws_security_group" "ssh_eic" {
    name        = "test-eic-sg"
    description = "EIC Security Group For Test"
    vpc_id            = aws_vpc.test.id

    ingress {
        from_port   = 22
        to_port     = 22
        protocol    = "tcp"
        cidr_blocks = ["x.x.x.x/x"]
    }

    egress {
        from_port   = 22
        to_port     = 22
        protocol    = "tcp"
        cidr_blocks = ["0.0.0.0/0"]
    }
}

resource "aws_instance" "test" {
    ami           = "ami-0cfc97bf81f2eadc4"
    instance_type = "t2.micro"
    subnet_id = aws_subnet.test_private_subnet.id
    security_groups = [aws_security_group.ssh_ec2.id]
}

resource "aws_security_group" "ssh_ec2" {
    name        = "test-ec2-sg"
    description = "EC2 Instance Security Group For Test"
    vpc_id            = aws_vpc.test.id

    ingress {
        from_port   = 22
        to_port     = 22
        protocol    = "tcp"
        cidr_blocks = ["x.x.x.x/x"]
    }

    egress {
        from_port   = 22
        to_port     = 22
        protocol    = "tcp"
        cidr_blocks = ["0.0.0.0/0"]
    }
}

デプロイ

次のコマンドを実行して作成したTerraformコードをデプロイします。

$ terraform init
$ terraform plan
$ terraform apply

接続確認

デプロイが完了できたら次のコマンドを入力して、接続を確認します。

$ aws ec2-instance-connect ssh --instance-id インスタンスID --connection-type eice

最後に

EIC Endpointがリリーズされてからあまり経ってないですがすぐTerraformで使えることができてるTerraformの速度に驚きました。

EIC EndpointもTerraformで作成しましょう!

参照

https://github.com/hashicorp/terraform-provider-aws/blob/main/website/docs/r/ec2_instance_connect_endpoint.html.markdown

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.